package javabasic.threads;

public class DiffSleepWait {
    public static void main(String[] args) {
        //wait和sleep的区别
        //1、wait是object方法  sleep是thread的方法
        //2、wait是释放锁的，但是sleep是不释放锁的
        //3、sleep在任何地方都可以使用，但是wait只能在synchronize方法或代码块中使用
        Object lock = new Object();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程A等待获取锁。。。。。");
                synchronized (lock){
                    System.out.println("线程A获取到了锁");
                    try {
                        Thread.sleep(20);
                        System.out.println("线程A开始执行wait方法");
                        lock.wait(1000);//如果wait无参数，表示永久等待
                        System.out.println("线程A执行完毕");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程B等待获取锁");
                synchronized (lock){

                    System.out.println("线程B获取到了锁");
                    System.out.println("线程B sleep一段时间");
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("线程B执行完毕");
                }
            }
        }).start();
    }
}
